home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / aal / endian.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  3KB  |  91 lines

  1. /* Copyright (C) 2001, 2002, 2003 by Hans Reiser, licensing governed by
  2.    libaal/COPYING.
  3.    
  4.    endian.h -- endianess translation macros. This is a number of macro because
  5.    macro is better for performance than to use functions which are determining
  6.    the translation kind in the run time. */
  7.  
  8. #ifndef AAL_ENDIAN_H
  9. #define AAL_ENDIAN_H
  10.  
  11. #ifdef HAVE_CONFIG_H
  12. #  include <config.h>
  13. #endif
  14.  
  15. #include <aal/types.h>
  16.  
  17. #define __aal_get_octave(x, n)        ( ((x) >> (8 * (n))) & 0xff )
  18.  
  19. #define __aal_swap16(x)            ( (__aal_get_octave(x, 0) << 8)        \
  20.                     + (__aal_get_octave(x, 1) << 0) )
  21.     
  22. #define __aal_swap32(x)            ( (__aal_get_octave(x, 0) << 24)    \
  23.                     + (__aal_get_octave(x, 1) << 16)    \
  24.                     + (__aal_get_octave(x, 2) << 8)        \
  25.                     + (__aal_get_octave(x, 3) << 0) )
  26.     
  27. #define __aal_swap64(x)            ( (__aal_get_octave(x, 0) << 56)    \
  28.                     + (__aal_get_octave(x, 1) << 48)    \
  29.                     + (__aal_get_octave(x, 2) << 40)    \
  30.                     + (__aal_get_octave(x, 3) << 32)    \
  31.                     + (__aal_get_octave(x, 4) << 24)    \
  32.                     + (__aal_get_octave(x, 5) << 16)    \
  33.                     + (__aal_get_octave(x, 6) << 8)        \
  34.                     + (__aal_get_octave(x, 7) << 0) )
  35.  
  36. #define aal_swap16(x)            ((uint16_t) __aal_swap16((uint16_t)x))
  37. #define aal_swap32(x)            ((uint32_t) __aal_swap32((uint32_t)x))
  38. #define aal_swap64(x)            ((uint64_t) __aal_swap64((uint64_t)x))
  39.  
  40. /*
  41.   Endianess is determined by configure script in the configuring time, that is 
  42.   before compiling the package.
  43. */
  44. #ifdef WORDS_BIGENDIAN
  45.  
  46. #  define CPU_TO_LE16(x)        aal_swap16(x)
  47. #  define CPU_TO_BE16(x)        (x)
  48. #  define CPU_TO_LE32(x)        aal_swap32(x)
  49. #  define CPU_TO_BE32(x)        (x)
  50. #  define CPU_TO_LE64(x)        aal_swap64(x)
  51. #  define CPU_TO_BE64(x)        (x)
  52.  
  53. #  define LE16_TO_CPU(x)        aal_swap16(x)
  54. #  define BE16_TO_CPU(x)        (x)
  55. #  define LE32_TO_CPU(x)        aal_swap32(x)
  56. #  define BE32_TO_CPU(x)        (x)
  57. #  define LE64_TO_CPU(x)        aal_swap64(x)
  58. #  define BE64_TO_CPU(x)        (x)
  59.  
  60. #else
  61.  
  62. #  define CPU_TO_LE16(x)        (x)
  63. #  define CPU_TO_BE16(x)        aal_swap16(x)
  64. #  define CPU_TO_LE32(x)        (x)
  65. #  define CPU_TO_BE32(x)        aal_swap32(x)
  66. #  define CPU_TO_LE64(x)        (x)
  67. #  define CPU_TO_BE64(x)        aal_swap64(x)
  68.  
  69. #  define LE16_TO_CPU(x)        (x)
  70. #  define BE16_TO_CPU(x)        aal_swap16(x)
  71. #  define LE32_TO_CPU(x)        (x)
  72. #  define BE32_TO_CPU(x)        aal_swap32(x)
  73. #  define LE64_TO_CPU(x)        (x)
  74. #  define BE64_TO_CPU(x)        aal_swap64(x)
  75.  
  76. #endif
  77.  
  78. #define aal_get_leXX(xx, p, field)    (LE##xx##_TO_CPU (get_unaligned((&(p)->field))))
  79. #define aal_set_leXX(xx, p, field, val)    put_unaligned(CPU_TO_LE##xx(val), (&(p)->field))
  80.  
  81. #define aal_get_le16(p, field)         aal_get_leXX(16, p, field)
  82. #define aal_set_le16(p, field, val)     aal_set_leXX(16, p, field, val)
  83.  
  84. #define aal_get_le32(p, field)         aal_get_leXX(32, p, field)
  85. #define aal_set_le32(p, field, val)    aal_set_leXX(32, p, field, val)
  86.  
  87. #define aal_get_le64(p, field)         aal_get_leXX(64, p, field)
  88. #define aal_set_le64(p, field, val)     aal_set_leXX(64, p, field, val)
  89.  
  90. #endif
  91.